关于linux:如何将命令的输出直接复制到我的剪贴板?

您所在的位置:网站首页 linux 复制命令行 关于linux:如何将命令的输出直接复制到我的剪贴板?

关于linux:如何将命令的输出直接复制到我的剪贴板?

2024-06-17 00:12| 来源: 网络整理| 查看: 265

如何在使用终端时将命令的输出传输到剪贴板并将其粘贴回来? 例如:

1cat file | clipboard 相关讨论 管道可能与剪贴板重复 superuser.com/questions/104981/&hellip可能重复;

我一直想做到这一点,并找到了一个简单易行的方法。我写下了完整的程序,以防万一其他人需要它。

首先安装名为xclip的16 KB程序:

1sudo apt-get install xclip

然后,您可以将输出通过管道传输到xclip以复制到剪贴板中:

1cat file | xclip

要粘贴刚复制的文本,您应使用:

1xclip -o

为简化生活,您可以像我一样在.bashrc文件中设置别名:

12alias"c=xclip" alias"v=xclip -o"

为了看看它有多有用,想象一下我想在一个新的终端窗口中打开我当前的路径(在某些系统上可能还有其他方法可以像Ctrl + T那样做,但这只是为了说明目的):

12345Terminal 1: pwd | c Terminal 2: cd `v`

注意v周围的` `。这首先执行v作为命令,然后将其替换为cd使用。

仅将内容复制到X剪贴板

1cat file | xclip

如果要粘贴除X应用程序以外的其他位置,请尝试以下方法:

1cat file | xclip -selection clipboard 相关讨论 "cat file | xclip"只将内容复制到'X'剪贴板,如果你想粘贴"X"应用程序以外的其他地方,试试这个:"cat file | xclip -selection clipboard" 您选择的手柄是合适的! 太棒了!我的Thunar现在有复制绝对路径到剪贴板。 ;) 如果要删除换行符,以便可以直接粘贴和编辑"pwd | c"的结果,可以执行"pwd | tr -d' n'| xclip -selection c" 有没有办法在类似于alias"ve=`xclip -o`"的别名上执行命令行中剪贴板中的字符串? 这个二进制安全吗? 还可以定义alias"cs=xclip -selection clipboard"和alias"vs=xclip -o -selection clipboard",以便更轻松地从系统剪贴板进行复制/粘贴 xclip fileName适用于我的Ubuntu Trusty 14.04。此外,xclip -selection c适用于Control-C的正常副本。 Control-V的等价物是xclip -o -selection c 别名的语法不是alias a="b -c"而不是alias"a=b -c"吗?这就是我在ubuntuusers上看到的内容,但显然没有人注意到它...... 如果我没有sudo访问权限的解决方案,并且没有安装xclip? 它在RHEL中不可用。 我不确定,但我得到以下错误Error: Can't open display: (null) @Legend

在OS X上,使用pbcopy; pbpaste走向相反的方向。

相关讨论 Yups!对于ex:pbcopy 就像这样 对命令输出不起作用 - 例如pbcopy 使用它适合我的管道:pwd | pbcopy 如果您正在使用tmux,除非您重新连接会话,否则它将无法运行:superuser.com/a/413233/146254 你也可以使用cat,如果你已经使用它:cat file.txt | pbcopy 酷和好..

我已经为Linux / OSX / Cygwin创建了一个类似于其他一些工具但略微独特的工具。我称之为cb,它可以在这个github gist中找到。

在那个要点中,我演示了如何使用Linux,macOS和Cygwin通过命令行进行复制和粘贴。

Linux的

1234567_copy(){     cat | xclip -selection clipboard } _paste(){     xclip -selection clipboard -o }

苹果系统

1234567_copy(){     cat | pbcopy } _paste(){     pbpaste }

Cygwin的

1234567_copy(){     cat > /dev/clipboard } _paste(){     cat /dev/clipboard }

注意:我原本打算在我对Bob Enohp的回答的评论中提到这一点。但后来我意识到我应该向我的要点添加一个自述文件。由于gist编辑器没有提供Markdown预览,所以我在这里使用了答案框,在复制/粘贴之后我想到了"我不妨提交答案"。

CB

防漏T恤到剪贴板

此脚本以tee(见man tee)为模型。

它就像您的普通复制和粘贴命令,但统一并能够感知您何时希望它可链接

例子

复制

12$ date | cb # clipboard contains: Tue Jan 24 23:00:00 EST 2017

12345678# clipboard retained from the previous block $ cb Tue Jan 24 23:00:00 EST 2017 $ cb | cat Tue Jan 24 23:00:00 EST 2017 $ cb > foo $ cat foo Tue Jan 24 23:00:00 EST 2017

链接

12345$ date | cb | tee updates.log Tue Jan 24 23:11:11 EST 2017 $ cat updates.log Tue Jan 24 23:11:11 EST 2017 # clipboard contains: Tue Jan 24 23:11:11 EST 2017

通过文件重定向复制

(按时间顺序,最后演示这个是有意义的)

12345# clipboard retained from the previous block $ cb < foo $ cb Tue Jan 24 23:00:00 EST 2017 # note the minutes and seconds changed from 11 back to 00 相关讨论 今天我得到了一个没有评论的downvote。真棒! #社区

我写了这个小脚本,从复制/粘贴命令中获取猜测。

Linux版本的脚本依赖于已在系统中安装的xclip。该脚本称为剪贴板。

123456789101112131415161718192021#!/bin/bash # Linux version # Use this script to pipe in/out of the clipboard # # Usage: someapp | clipboard     # Pipe someapp's output into clipboard #        clipboard | someapp     # Pipe clipboard's content into someapp # if command -v xclip 1>/dev/null; then     if [[ -p /dev/stdin ]] ; then         # stdin is a pipe         # stdin -> clipboard         xclip -i -selection clipboard     else         # stdin is not a pipe         # clipboard -> stdout         xclip -o -selection clipboard     fi else     echo"Remember to install xclip" fi

OS X版本的脚本依赖于所有Mac上预装的pbcopy和pbpaste。

1234567891011121314151617#!/bin/bash # OS X version # Use this script to pipe in/out of the clipboard # # Usage: someapp | clipboard     # Pipe someapp's output into clipboard #        clipboard | someapp     # Pipe clipboard's content into someapp # if [[ -p /dev/stdin ]] ; then     # stdin is a pipe     # stdin -> clipboard     pbcopy else     # stdin is not a pipe     # clipboard -> stdout     pbpaste fi

使用脚本非常简单,因为您只需管道输入或输出clipboard,如这两个示例所示。

123$ cat file | clipboard $ clipboard | less 相关讨论 我在Linux上使用名称pbcopy和pbpaste,因此它适用于Linux和OS X. 要使脚本在ubuntu中全局工作:*将其保存在~/.scripts/clipboard *为bash设置可执行文件chmod +x ~/.scripts/clipboard:*将export PATH=$PATH:~/.scripts添加到~/.bashrc的末尾以获取fish:* add set PATH ~/.scripts $PATH to ~/.config/fish/fish.config如果尚未存在任何文件或文件夹,则只需创建它们。 您还可以将此脚本包装为函数clipboard(){ ... }并将其粘贴到.bashrc中 这与我制作的非常相似,但我允许链接像date | cb | tee -a updates.log。这会将date命令输出发送到剪贴板并将其传递给tee -a命令,该命令将其附加到文件并将其传递给stdout。但它就像一个"防漏T恤到剪贴板",因为如果你只是做date | cb就没有输出。最后它也做了cb > file.txt gist.github.com/RichardBronosky/… 一个建议 - 剥离尾部换行符以避免在粘贴时执行命令(例如,如果复制粘贴路径)。我通过将命令xclip -i -selection clipboard修改为xargs echo -n | xclip -i -selection clipboard来实现 实际上,如果要复制到剪贴板的内容是多行的,上面的命令就不能正常工作。以下是我为解决此问题所做的工作:cat - | perl -pe 'chomp if eof' | xclip -selection clipboard

将其添加到~/.bashrc:

123# Now `cclip' copies and `clipp' pastes' alias cclip='xclip -selection clipboard' alias clipp='xclip -selection clipboard -o'

Now clipp pastes and cclip copies — but you can also do fancier stuff:

1clipp | sed 's/^/    /' | cclip

↑ indents your clipboard; good for sites without stack overflow's { } button

您可以通过运行以下命令添加它:

123456printf" alias clipp=\'xclip -selection c -o\' ">> ~/.bashrc printf" alias cclip=\'xclip -selection c -i\' ">> ~/.bashrc 相关讨论 请给出一个使用示例

我正在使用Parcellite和xsel将最后一次提交消息从git复制到我的剪贴板管理器(由于某种原因xclip不起作用):

1$ git log -1 --pretty=%B | xsel -i -b

如果不使用外部工具,如果要连接到服务器视图SSH,这是一个相对简单的命令:

从Windows 7+命令提示符:

1ssh user@server cat /etc/passwd | clip

这会将远程文件的内容放入本地剪贴板。

(该命令需要为密钥运行Pageant,否则它将要求您输入密码。)

相关讨论 @AfshinMoazami,标题和问题本身是通用的,只有标签提示unix系统,我的答案涵盖了当你试图从unix服务器到Windows机器的日期,这可能是有用的未来读者。 Upvoted是因为对于只有Powershell在本地玩的Windows管理员很有用(虽然现在LSW实际上是功能性的,我可以直接从Powershell进入bash并从那里做我的* nixy事情)。 它在DOS上工作,以及在Windows 10上的git bash,即echo Hello World | clip

在安装了xclip的Linux中:

xclip -selection clipboard

相关讨论 xclip -sel c 也会奏效

我制作了一个提供类似功能的小工具,不使用xclip或xsel。 stdout被复制到剪贴板,可以再次粘贴到终端中。看到:

https://sourceforge.net/projects/commandlinecopypaste/

请注意,此工具不需要X会话。剪贴板只能在终端中使用,不能通过Ctrl + V或鼠标中键点击粘贴到其他X-windows中。

基于之前的帖子,我最终得到了以下轻量级别名解决方案,可以添加到.bashrc:

12345if [ -n"$(type -P xclip)" ] then   alias xclip='xclip -selection clipboard'   alias clipboard='if [ -p /dev/stdin ]; then xclip -in; fi; xclip -out' fi

例子:

1234567891011# Copy $ date | clipboard Sat Dec 29 14:12:57 PST 2018 # Paste $ date Sat Dec 29 14:12:57 PST 2018 # Chain $ date | clipboard | wc    1       6      29

只是为了覆盖边缘情况:)并且因为问题标题要求(至少现在)如何将命令的输出直接复制到剪贴板。

通常我发现在命令输出已经执行之后复制命令的输出并且我不希望或不能再次执行命令是有用的。

对于这种情况,我们可以使用gdm或类似的鼠标实用程序,并使用鼠标选择。 apt-get install gdm然后右键单击或Cntrl + Shift + c和Cntrl + Shift + v组合在终端中复制和粘贴

或者,这是我的首选方法(因为当你有多个窗格并且你需要选择多行时,鼠标无法在一个窗格内正确选择),使用tmux我们可以使用标准复制到tmux缓冲区[,空格,移动选择,输入或您可以选择一个代码块。当你在像tmux这样的cli多路复用器的一个通道内时,这个特别有用,你需要选择一堆文本,而不是行号(我的vim设置呈现行号)

在此之后,您可以使用以下命令:

tmux save-buffer - | xclip -i

您当然可以将其别名为您喜欢的内容或直接在tmux配置文件中绑定

这只是为了给你一个概念性的答案,以便在无法再次执行命令时覆盖这种边缘情况。如果您需要更具体的代码示例,请告诉我们

干杯

我来自一个精简的KDE背景,无法访问xclip,xsel或其他花哨的东西。我有一个TCSH Konsole让事情变得更糟。

必需条件:qdbus klipper xargs bash

创建一个bash可执行文件foo.sh。

12#!/bin/bash qdbus org.kde.klipper /klipper setClipboardContents"$1"> /dev/null

注意:这需要是bash,因为TCSH不支持多行参数。

其次是.cshrc中的TCSH别名。

1alias clipboard xargs -0 /path/to/foo

说明:

xargs -0将stdin管道化为单个参数。此参数传递给bash可执行文件,该文件可执行文件使用qdbus向klipper发送"复制到剪贴板"请求。到/dev/null的管道不会将qdbus返回的换行符打印到控制台。

用法示例:

1ls | clipboard

这会将当前文件夹的内容复制到剪贴板中。

注意:仅适用于管道。如果需要复制参数,请直接使用bash可执行文件。

对于那些在Windows系统上安装bash的用户(称为Windows子系统Linux(WSL)),尝试使用xclip会出错:

1Error: Can't open display: (null)

相反,回想一下linux子系统可以访问Windows可执行文件。可以像使用clip.exe一样

1echo hello | clip.exe

允许您使用粘贴命令(ctrl-v)。

相关讨论 请注意,如果在Windows上安装了xserver(例如vcxsvr或xming),显示器已启动且xclipboard正在运行,您实际上可以无缝地使用xclip。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3